﻿/*----------------------------------------------------------------
  //Copyright (C) 2011 赵国伟
  //文件功能描述：Velocity模板生成辅助类；
  //创建人：赵国伟
  //创建时间：2012-04-18 
//----------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using NVelocity;
using NVelocity.App;
using NVelocity.Context;
using NVelocity.Runtime;
using Commons.Collections;

namespace Shopping.Common
{
    /// <summary>
    /// NVelocity 的辅助类 ：目的：减少各个页面调用该引擎时 繁琐的初始化等步骤；
    /// 每次只需要将装载好的IContext 和模板路径 传递给GetMergeContent 即可获得合成的
    /// 字符串内容 ；by 赵国伟  2009-9-11  ；
    public class VelocityHelper
    {
        public static VelocityEngine velocity;

        public static ExtendedProperties props;  ///Velocity属性对象；

        public static Template template;  //模板对象； 负责模板数据的替换；等；


        #region "静态构造函数"
        /// <summary>
        /// 静态构造函数：负责初始化各个对象；以后每个模块页面都共享这些对象；一方面减少了内存占用；
        /// </summary>
        static VelocityHelper()
        {
            velocity = new VelocityEngine();
            velocity.AddProperty("input.encoding", "GB2312");
            velocity.AddProperty("output.encoding", "GB2312");
            velocity.SetProperty(RuntimeConstants_Fields.INPUT_ENCODING, "GB2312");
            velocity.SetProperty(RuntimeConstants_Fields.OUTPUT_ENCODING, "GB2312");
            props = new ExtendedProperties();
            props.SetProperty("resouce.loader", "file");
            props.AddProperty("file.resource.loader.path", Config.Template_Folder.Replace("\\","/"));
            props.AddProperty("file.resource.loader.cache", "false");
            props.AddProperty("input.encoding", "GB2312");
            props.AddProperty("output.encoding", "GB2312");
            //props.SetProperty("input.encoding", "gb2312");
            //props.SetProperty("output.encoding", "gb2312");
            velocity.Init(props);
        }
        #endregion

        #region "将制定的模板文件 与其对应的内容对象 进行组合 生成最终的内容 ；"
        /// <summary>
        ///  将制定的模板文件 与其对应的内容对象 进行组合 生成最终的内容 ；
        /// </summary>
        /// <param name="tmpFile"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public static string GetMergeContent(string tmpFile, IContext context)
        {

            template = velocity.GetTemplate(tmpFile, "gb2312");
            StringWriter result = new StringWriter();

            template.Merge(context, result);

            return result.ToString();
        }
        #endregion


    }
}
